function B1GG() { }
B1GG.m8n = (function () {
    var c2x = function (B2x, s2x) {
        var C2x = s2x & 0xffff;
        var W2x = s2x - C2x;
        return (W2x * B2x | 0) + (C2x * B2x | 0) | 0;
    },
        v2x = function (g2x, t2x, X2x) {
            var T2x = 0xcc9e2d51,
                a2x = 0x1b873593;
            var j2x = X2x;
            var f2x = t2x & ~0x3;
            for (var V2x = 0; V2x < f2x; V2x += 4) {
                var U2x = g2x.charCodeAt(V2x) & 0xff | (g2x.charCodeAt(V2x + 1) & 0xff) << 8 | (g2x.charCodeAt(V2x + 2) & 0xff) << 16 | (g2x.charCodeAt(V2x + 3) & 0xff) << 24;
                U2x = c2x(U2x, T2x);
                U2x = (U2x & 0x1ffff) << 15 | U2x >>> 17;
                U2x = c2x(U2x, a2x);
                j2x ^= U2x;
                j2x = (j2x & 0x7ffff) << 13 | j2x >>> 19;
                j2x = j2x * 5 + 0xe6546b64 | 0;
            }
            U2x = 0;
            switch (t2x % 4) {
                case 3:
                    U2x = (g2x.charCodeAt(f2x + 2) & 0xff) << 16;
                case 2:
                    U2x |= (g2x.charCodeAt(f2x + 1) & 0xff) << 8;
                case 1:
                    U2x |= g2x.charCodeAt(f2x) & 0xff;
                    U2x = c2x(U2x, T2x);
                    U2x = (U2x & 0x1ffff) << 15 | U2x >>> 17;
                    U2x = c2x(U2x, a2x);
                    j2x ^= U2x;
            }
            j2x ^= t2x;
            j2x ^= j2x >>> 16;
            j2x = c2x(j2x, 0x85ebca6b);
            j2x ^= j2x >>> 13;
            j2x = c2x(j2x, 0xc2b2ae35);
            j2x ^= j2x >>> 16;
            return j2x;
        };
    return {
        Z2x: v2x
    };
})();
B1GG.a8n = function () {
    return typeof B1GG.m8n.Z2x === 'function' ? B1GG.m8n.Z2x.apply(B1GG.m8n, arguments) : B1GG.m8n.Z2x;
};
B1GG.w8n = function () {
    return typeof B1GG.m8n.Z2x === 'function' ? B1GG.m8n.Z2x.apply(B1GG.m8n, arguments) : B1GG.m8n.Z2x;
};

this.getJSFonts = function (s46) {
    var W46, o46, y46, K46, U46, R46, w46, k46, u46, Y46, v46, G46, Z46, p46, C46, A46, q46;
    W46 = ['monospace', 'sans-serif', 'serif'];    //
    o46 = ["Andale Mono", "Arial", "Arial Black", "Arial Hebrew", "Arial MT", "Arial Narrow", "Arial Rounded MT Bold", "Arial Unicode MS", "Bitstream Vera Sans Mono", "Book Antiqua", "Bookman Old Style", "Calibri", "Cambria", "Cambria Math", "Century", "Century Gothic", "Century Schoolbook", "Comic Sans", "Comic Sans MS", "Consolas", "Courier", "Courier New", "Garamond", "Geneva", "Georgia", "Helvetica", "Helvetica Neue", "Impact", "Lucida Bright", "Lucida Calligraphy", "Lucida Console", "Lucida Fax", "LUCIDA GRANDE", "Lucida Handwriting", "Lucida Sans", "Lucida Sans Typewriter", "Lucida Sans Unicode", "Microsoft Sans Serif", "Monaco", "Monotype Corsiva", "MS Gothic", "MS Outlook", "MS PGothic", "MS Reference Sans Serif", "MS Sans Serif", "MS Serif", "MYRIAD", "MYRIAD PRO", "Palatino", "Palatino Linotype", "Segoe Print", "Segoe Script", "Segoe UI", "Segoe UI Light", "Segoe UI Semibold", "Segoe UI Symbol", "Tahoma", "Times", "Times New Roman", "Times New Roman PS", "Trebuchet MS", "Verdana", "Wingdings", "Wingdings 2", "Wingdings 3"];
    y46 = "mmmmmmmmmmlli";
    K46 = "72px";
    // if (!document.getElementsByTagName("body")[0])
    //     return false;
    U46 = document.body;//
    R46 = document.createElement("div");//
    w46 = document.createElement("div");//
    k46 = {};
    u46 = {};
    Y46 = function () {
        var e46;
        e46 = document.createElement("span");
        e46.style.position = "absolute";
        e46.style.left = "-9999px";
        e46.style.fontSize = K46;
        e46.style.lineHeight = "normal";
        e46.innerHTML = y46;
        return e46;
    }
    ;
    v46 = function (F46, n46) {
        var S46;
        S46 = Y46();
        S46.style.fontFamily = "'" + F46 + "'," + n46;
        return S46;
    }
    ;
    G46 = function () {
        var M46, E46;
        M46 = [];
        for (var c46 = 0, h46 = W46.length; c46 < h46; c46++) {
            E46 = Y46();
            E46.style.fontFamily = W46[c46];
            R46.appendChild(E46);
            M46.push(E46);
        }
        return M46;
    }
    ;
    Z46 = function () {
        var x46, D46, P46;
        x46 = {};
        for (var H46 = 0, T46 = o46.length; H46 < T46; H46++) {
            D46 = [];
            for (var r46 = 0, i46 = W46.length; r46 < i46; r46++) {
                P46 = v46(o46[H46], W46[r46]);
                w46.appendChild(P46);
                D46.push(P46);
            }
            x46[o46[H46]] = D46;
        }
        return x46;
    }
    ;
    p46 = function (Q46) {
        var d46;
        d46 = false;
        for (var a46 = 0; a46 < W46.length; a46++) {
            d46 = Q46[a46].offsetWidth !== k46[W46[a46]] || Q46[a46].offsetHeight !== u46[W46[a46]];
            if (d46)
                return d46;
        }
        return d46;
    }
    ;
    C46 = G46();
    U46.appendChild(R46);
    for (var j46 = 0, z46 = W46.length; j46 < z46; j46++) {
        k46[W46[j46]] = C46[j46].offsetWidth;
        u46[W46[j46]] = C46[j46].offsetHeight;
    }
    A46 = Z46();
    U46.appendChild(w46);
    q46 = [];
    for (var I46 = 0, O46 = o46.length; I46 < O46; I46++)
        if (p46(A46[o46[I46]]))
            q46.push(o46[I46]);
    U46.removeChild(w46);
    U46.removeChild(R46);
    return q46;
}
;


var canvasFp = function () {
    var T26, P26, h;
    T26 = document.createElement('canvas');
    T26.width = 2000;
    T26.height = 200;
    T26.style.display = 'inline';
    P26 = T26.getContext('2d');
    P26.rect(0, 0, 10, 10);
    P26.rect(2, 2, 6, 6);
    //i26.push(P26.isPointInPath(5, 5, 'evenodd') === false ? "canvas winding:yes" : "canvas winding:no");
    h=P26.isPointInPath(5, 5, 'evenodd') === false ? "canvas winding:yes" : "canvas winding:no";
    P26.textBaseline = 'alphabetic';
    P26.fillStyle = '#f60';
    P26.fillRect(125, 1, 62, 20);
    P26.fillStyle = '#069';
    P26.font = '11pt no-real-font-123';
    P26.fillText('Cwm fjordbank glyphs vext quiz, 😃', 2, 15);
    P26.fillStyle = 'rgba(102, 204, 0, 0.2)';
    P26.font = '18pt Arial';
    P26.fillText('Cwm fjordbank glyphs vext quiz, 😃', 4, 45);
    P26.globalCompositeOperation = 'multiply';
    P26.fillStyle = 'rgb(255,0,255)';
    P26.beginPath();
    P26.arc(50, 50, 50, 0, Math.PI * 2, true);
    P26.closePath();
    P26.fill();
    P26.fillStyle = 'rgb(0,255,255)';
    P26.beginPath();
    P26.arc(100, 50, 50, 0, Math.PI * 2, true);
    P26.closePath();
    P26.fill();
    P26.fillStyle = 'rgb(255,255,0)';
    P26.beginPath();
    P26.arc(75, 100, 50, 0, Math.PI * 2, true);
    P26.closePath();
    P26.fill();
    P26.fillStyle = 'rgb(255,0,255)';
    P26.arc(75, 75, 75, 0, Math.PI * 2, true);
    P26.arc(75, 75, 25, 0, Math.PI * 2, true);
    P26.fill('evenodd');
    // return T26.toDataURL();
    return  h+"~canvas fp:"+T26.toDataURL();
};
this.getPixelRatio = function () {
    return window.devicePixelRatio || "";
};
this.getDepth = function () {
    return screen.colorDepth || -1;
}
this.getCPUClass = function () {
    if (navigator.cpuClass)
        return navigator.cpuClass;
    else
        return "unknown";
}
this.getPlatformKey = function () {
    if (navigator.platform)
        return navigator.platform;
    else
        return "unknown";
}
this.getHardwareConcrun = function () {
    if (navigator.hardwareConcurrency)
        return navigator.hardwareConcurrency;
    return "unknown";
}

this.getTouch = function () {
    var F36, n36, o8n, W8n, p8n, c36;
    F36 = 0;
    n36 = false;
    if (typeof navigator.maxTouchPoints !== 'undefined')
        F36 = navigator.maxTouchPoints;
    else if (typeof navigator.msMaxTouchPoints !== 'undefined')
        F36 = navigator.msMaxTouchPoints;
    if (isNaN(F36))
        F36 = -999;
    try {
        (o8n = -1995648377,
        W8n = 1574423020,
        p8n = 2);
        for (var u8n = 1; B1GG.w8n(u8n.toString(), u8n.toString().length, 37762) !== o8n; u8n++) {
            document.createEvent('');
            n36 = false;
            p8n += 2;
        }
        if (B1GG.a8n(p8n.toString(), p8n.toString().length, 25150) !== W8n) {
            document.createEvent('');
            n36 = true;
        }
        document.createEvent('TouchEvent');
        n36 = true;
    } catch (E36) { }
    c36 = ('ontouchstart' in window);
    return [F36, n36, c36];
}
this.each = function (V46, b46, t46) {
    if (V46 === null)
        return;
    if (this.nativeForEach && V46.forEach === this.nativeForEach)
        V46.forEach(b46, t46);
    else if (V46.length === +V46.length) {
        for (var m46 = 0, l36 = V46.length; m46 < l36; m46++)
            if (b46.call(t46, V46[m46], m46, V46) === ({}))
                return;
    } else
        for (var X46 in V46)
            if (V46.hasOwnProperty(X46))
                if (b46.call(t46, V46[X46], X46, V46) === ({}))
                    return;
}
this.map = function (B36, L36, J36) {
    var f36;
    f36 = [];
    if (B36 == null)
        return f36;
    if (this.nativeMap && B36.map === this.nativeMap)
        return B36.map(L36, J36);
    this.each(B36, function (N36, g36, W36) {
        var P8n, B8n, T8n;
        (P8n = 1483811956,
        B8n = 1716802217,
        T8n = 2);
        for (var K8n = 1; B1GG.a8n(K8n.toString(), K8n.toString().length, 87773) !== P8n; K8n++) {
            f36[f36.length] = L36.call(J36, N36, g36, W36);
            T8n += 2;
        }
        if (B1GG.a8n(T8n.toString(), T8n.toString().length, 64827) !== B8n)
            f36[f36.length] = L36.call(J36, N36, g36, W36);
    });
    return f36;
}
;
this.getPluginsKey = function () {
    var Z36, p36, V4n, U4n, X4n, v36;
    v36 = [];
    for (var G36 = 0, O36 = navigator.plugins.length; G36 < O36; G36++)
        v36.push(navigator.plugins[G36]);

    v36 = v36.sort(function (A36, K36) {
        if (A36.name > K36.name)
            return 1;
        if (A36.name < K36.name)
            return -1;
        return 0;
    });
    return this.map(v36, function (s36) {
        var e36;
        e36 = this.map(s36, function (S36) {
            return [S36.type, S36.suffixes].join('~');
        }).join(',');
        return [s36.name, s36.description, e36].join('::');
    }, this);
}
this.filter = function (o36, j36, U36) {
    if (!Array.prototype.filter)
        Array.prototype.filter = function (k36, q36) {
            'use strict';
            var Y36, w36, R36, C36, I36, u36, M7n, u7n, P7n;
            if (!((typeof k36 === 'Function' || typeof k36 === 'function') && this))
                throw new TypeError();
            Y36 = this.length >>> 0;
            w36 = new Array(Y36);
            R36 = this;
            C36 = 0;
            I36 = -1;
            if (q36 === undefined) {
                while (++I36 !== Y36)
                    if ((I36 in this)) {
                        u36 = R36[I36];
                        if (k36(R36[I36], I36, R36))
                            w36[C36++] = u36;
                    }
            } else
                while (++I36 !== Y36)
                    if ((I36 in this)) {
                        u36 = R36[I36];
                        if (k36.call(q36, R36[I36], I36, R36))
                            w36[C36++] = u36;
                    }
            (M7n = 1062173852,
            u7n = -156360478,
            P7n = 2);
            for (var T7n = 1; B1GG.a8n(T7n.toString(), T7n.toString().length, 57583) !== M7n; T7n++) {
                w36.length = C36;
                P7n += 2;
            }
            if (B1GG.a8n(P7n.toString(), P7n.toString().length, 24848) !== u7n)
                w36.length = C36;
            return w36;
        }
    ;
    return o36.filter(j36, U36);
}
this.getWindowHash = function () {
    var M36, h36, i4n, q4n, G4n;
    if (!Object.getOwnPropertyNames)
        return 'LEGACY_ENV';
    M36 = /^[A-z][\d](\w){2}$/;
    h36 = this.filter(Object.getOwnPropertyNames(window), function (H36) {
        return !H36.match(M36);
    });
    (i4n = 305943274,
    q4n = -15728257,
    G4n = 2);
    for (var F4n = 1; B1GG.w8n(F4n.toString(), F4n.toString().length, 89612) !== i4n; F4n++)
      //  return FP.x64hash128(h36.sort().join('|'), 420);
    return h36.sort().join('|');
    if (B1GG.w8n(G4n.toString(), G4n.toString().length, 15504) !== q4n)
     //   return FP.x64hash128(h36.sort().join(''), 987);
    return h36.sort().join('');
}
this.getWindowProtoChainHash = function () {
    var x4n, r4n, y4n, r36, x36;
    if (!Object.getOwnPropertyNames) {
        (x4n = -1469768626,
        r4n = -1467911997,
        y4n = 2);
        for (var A4n = 1; B1GG.a8n(A4n.toString(), A4n.toString().length, 94190) !== x4n; A4n++)
            return '';
        if (B1GG.w8n(y4n.toString(), y4n.toString().length, 5539) !== r4n)
            return '';
        return 'LEGACY_ENV';
    }
    (r36 = window,
    x36 = []);
    while (!!Object.getPrototypeOf(r36)) {
        r36 = Object.getPrototypeOf(r36);
        x36 = x36.concat(Object.getOwnPropertyNames(r36));
    }
    return x36.join('|');
    //x36.join('|') 的结果是 TEMPORARY|PERSISTENT|constructor|addEventListener|dispatchEvent|removeEventListener|constructor|constructor|__defineGetter__|__defineSetter__|hasOwnProperty|__lookupGetter__|__lookupSetter__|isPrototypeOf|propertyIsEnumerable|toString|valueOf|__proto__|toLocaleString
   // return FP.x64hash128(x36.join('|'), 420);//'72627afbfd19a741c7da1732218301ac';//chrome 这个写死

}
this.getAvailableScreen = function () {
    var h26;
    if (screen.availWidth && screen.availHeight)
        h26 = screen.availHeight > screen.availWidth ? [screen.availHeight, screen.availWidth] : [screen.availWidth, screen.availHeight];
    if (typeof h26 !== 'undefined')
        return h26;
    return false;
}
var fp = canvasFp();
var jsf = getJSFonts();
var pixelRatio = getPixelRatio();
var depth = getDepth();
var cpuc = getCPUClass();
var platformKey = getPlatformKey();
var hardwareConcrun = getHardwareConcrun();
var touch = getTouch();
var pluginsKey = getPluginsKey();
var windowHash = getWindowHash();
var windowProtoChainHash = getWindowProtoChainHash();
var gAS = getAvailableScreen();
var ua = navigator.userAgent;
var json = {};
json.fp = fp;
json.jsf = jsf;
json.pr = pixelRatio;
json.dp = depth;
json.cpuc = cpuc;
json.platformk = platformKey;
json.hc = hardwareConcrun;
json.touch = touch;
json.pluginsKey = pluginsKey;
json.wHash = windowHash;
json.wPCHash = windowProtoChainHash;
json.as = gAS;
json.ua = ua;
var jsonStr=JSON.stringify(json);
console.log(jsonStr);